package org.jeecg.modules.wms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.wms.entity.WmsRequisition;
import org.jeecg.modules.wms.entity.WmsRequisitionAccessory;
import org.jeecg.modules.wms.entity.WmsRequisitionProfile;
import org.jeecg.modules.wms.vo.WmsRequisitionExecuteVO;
import org.jeecg.modules.wms.vo.WmsRequisitionVO;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 领料单服务接口
 */
public interface IWmsRequisitionService extends IService<WmsRequisition> {
    
    /**
     * 保存领料单（包含明细）
     * @param wmsRequisitionVO 领料单VO对象
     * @return 保存结果
     */
    Result<WmsRequisition> saveRequisition(WmsRequisitionVO wmsRequisitionVO);
    
    /**
     * 更新领料单（包含明细）
     * @param wmsRequisitionVO 领料单VO对象
     * @return 更新结果
     */
    Result<WmsRequisition> updateRequisition(WmsRequisitionVO wmsRequisitionVO);
    
    /**
     * 根据ID获取领料单信息
     * @param id 领料单ID
     * @return 领料单信息
     */
    WmsRequisitionVO getRequisitionById(String id);
    
    /**
     * 根据ID查询领料单型材明细
     * @param requisitionId 领料单ID
     * @return 型材明细列表
     */
    List<WmsRequisitionProfile> getProfileList(String requisitionId);
    
    /**
     * 根据ID查询领料单配件明细
     * @param requisitionId 领料单ID
     * @return 配件明细列表
     */
    List<WmsRequisitionAccessory> getAccessoryList(String requisitionId);
    
    /**
     * 删除领料单（包含明细）
     * @param id 领料单ID
     * @return 删除结果
     */
    boolean removeRequisitionById(String id);
    
    /**
     * 批量删除领料单（包含明细）
     * @param ids 领料单ID列表
     * @return 删除结果
     */
    boolean removeRequisitionByIds(List<String> ids);
    
    /**
     * 提交领料单审核
     * @param id 领料单ID
     * @return 提交结果
     */
    Result<?> submitRequisition(String id);
    
    /**
     * 审核领料单
     * @param id 领料单ID
     * @param approver 审核人
     * @param approveComment 审核意见
     * @param attachments 附件列表
     * @return 审核结果
     */
    Result<?> approveRequisition(String id, String approver, String approveComment, List<Map<String, String>> attachments);
    
    /**
     * 驳回领料单
     * @param id 领料单ID
     * @param approver 审核人
     * @param approveComment 驳回意见
     * @return 驳回结果
     */
    Result<?> rejectRequisition(String id, String approver, String approveComment);
    
    /**
     * 执行领料操作
     * @param executeVO 领料执行VO对象
     * @return 执行结果
     */
    Result<?> executeRequisition(WmsRequisitionExecuteVO executeVO);
    
    /**
     * 导入Excel数据
     * @param file Excel文件
     * @param request HTTP请求
     * @return 导入结果
     */
    Result<?> importExcel(MultipartFile file, HttpServletRequest request);

    IPage<WmsRequisition> queryPageList(Page<WmsRequisition> page, Map<String, Object> params);

    List<WmsRequisition> queryExportList(Map<String, Object> params);
} 